/*
 * main.c
 *
 *  Created on: Jul 31, 2012
 *      Author: Vasile Guta Ciucur
 *
 *  Single(unique on bus) temperature sensor example.
 *  Also, some tests for serial_putstr_f function...
 *******************************************************************************
 *  BSD License.
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  - Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *
 *  - Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 *  - Neither the name of Vasile Guta Ciucur nor the names of
 *    its contributors may be used to endorse or promote products derived from
 *    this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 *  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 *  POSSIBILITY OF SUCH DAMAGE.
 */

//Enable the following definitions on "atmegaclib.h" header:

//#define UART_BAUD_RATE      57600 // default is 57600
//#define UART_BAUD_SELECT    (F_CPU / (UART_BAUD_RATE * 16L) - 1)
//#define ENABLE_SERIAL_POLL  // require CONVERSION, conflicts with SERIAL
//#define ENABLE_CONVERSION   // useful for Serial, LCD and 7SEG Display
//#define ENABLE_ONE_WIRE     // one wire protocol
//#define ENABLE_DALLAS_TEMP  // Dallas temperature sensors, require ONE_WIRE


#ifndef F_CPU
	#define F_CPU 16000000U //required by Atmel Studio 6
#endif
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h> // needed to store const in FLASH mem.
#include <stdlib.h>
#include "atmegaclib.h"

DeviceAddress insideThermometer;
uint8_t temp_inces, temp_fractional, sign, i, err_check;
uint8_t s[7];
//Define some strings to be stored in FLASH memory, it
//is a test for "serial_putstr_f()" function
static uint8_t const PROGMEM pgm_str1[] =  "Start temperature conversion and \n\r\0";
static uint8_t const PROGMEM pgm_str2[] =  "let's find out the ID of our sensor...\n\r\0";

void main(void) __attribute__((noreturn)); //excluding an "int main()"
void main (void)
{
	//onboard_led_enable();
	serial_init(); // setup is made in libarduino.h header
	dt_init();
  //sei();
	serial_putstr_f((uint8_t *)pgm_str1);
	serial_putstr_f((uint8_t *)pgm_str2);
	//onboard_led_off();
	while(1)
	{
		dt_requestTemperaturesByIndex(0);
		dtostrf(dt_getTempCByIndex(0),7,2,(char *)s);
		serial_putstr((uint8_t *)"Temp=\0");
		serial_putstr((uint8_t *)s);
		//serial_putchar('\0');
		if (!dt_getAddress(insideThermometer, 0)) serial_putstr((uint8_t *)"Read error!\n\r\0");
		else
		{
			serial_putstr((uint8_t *)" ID=\0");
			for(i=0; i<8; i++)
			{
				//
				serial_puthexU08(insideThermometer[i]);
			}
			serial_putstr((uint8_t *)"\n\r\0");
		}
	}
}
